package Sort.QuickSort;
import java.util.Arrays;
//本为单边循环排序
//我的代码有问题，但我找不到错在哪

public class DanQuick {
    public static void main(String[] args) {
        int[] a = {9, 3, 7, 2, 5, 8, 1, 4};
        quick(a, 0, a.length - 1);
        System.out.println(Arrays.toString(a));
    }
    public static void quick(int[] a, int l, int h) {

        if(l>=h){
            return;
        }
        int p =sort(a, l, h);//基准点的索引值
        quick(a, l, p-1);//左边分区的范围确定
        quick(a, p+1, h);//左边分区的范围确定
    }
    private static int sort(int[] a, int l, int h) {
        int pv = a[h];
        int i = l;

        for (int j = 0; j < a.length; j++) {
            if (a[j] < pv) {
                exch(a, i, j);
                i++;
            }
        }
        System.out.println(Arrays.toString(a) + "i");
        exch(a, h, i);
        //返回值代表了基准点元素所在的正确索引，用它确定下一轮分区的边界
        return i;
    }
    private static void exch(int[] a, int x, int y) {
        int temp;
        temp = a[x];
        a[x] = a[y];
        a[y] = temp;
    }
}